package com.data_structure_algorithm.sort;

import java.util.Arrays;

public class SelectorSort {

    public static void main(String[] args) {
        int[] arr = {101, 345432, 78, 234, 9, 2, 25, 119, 1};
        sort2(arr);
        System.out.println(Arrays.toString(arr));
       /* int[] arrs = new int[80000];
        for (int i = 0; i < 80000; i++) {
            arrs[i] = (int) (Math.random() * 80000000);
        }
        String dateStart = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        System.out.println(dateStart);
        sort(arrs);
        String dateEnd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

        System.out.println(dateEnd);*/
    }


    public static void sort(int[] arr) {
        int count = 0;
        //从首元素开始，一直到数组最后元素，依次比较
        for (int i = 0; i < arr.length; i++) {
            //假设首元素为最小值
            int min = arr[i];
            int minIndex = i;
            //代表首元素之后即索引1--->length-1
            //首次比较是索引0和索引1，下轮即索引1和索引2.....一直到arr.length
            for (int j = i + 1; j < arr.length; j++) {
                //本轮首元素和后一个值比较
                if (min > arr[j]) {
                    min = arr[j];
                    minIndex = j;
                }
            }

            //交换
            if (minIndex != i) {  //如果当前最小索引还是循环之前的最小索引，说明当前i对应的值是最小的，无需交换
                arr[minIndex] = arr[i];
                arr[i] = min;
                //System.out.println("交换了第" + ++count + "次");

            }
        }

    }


    public static void sort2(int[] arr) {

        //步骤
        //明确 总轮数n-1次
        for (int i = 0; i < arr.length - 1; i++) {

            //默认将首元素假设为最小元素，依次和后面对比
            int min = arr[i];
            int minIndex = i;

            for (int j = i + 1; j < arr.length ; j++) {
                if (min > arr[j]) {
                    //标记位置
                    min = arr[j];
                    minIndex = j;
                }
            }

            //交换
            if (minIndex != i) {
                //标记的最小的值位置和首元素交换
                arr[minIndex] = arr[i];
                //将最小值放在首元素位置
                arr[i] = min;


            }
        }
    }


}
